﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Collections;
using System.ComponentModel.DataAnnotations;
using SchoolProject2012.Langue;
using System.Text.RegularExpressions;

namespace SchoolProject2012.Domain
{

    [MetadataType(typeof(ENTREPRISECV))]
    public class Entreprise
    {
        public int id { get; set; }
        public string libelle { get; set; }
        public string telephone { get; set; }
        public string fax { get; set; }
        public string mail { get; set; }
        public string adresse { get; set; }
        public string cp { get; set; }
        public string ville { get; set; }
        public string infoComp { get; set; }
        public List<Contactentreprise> contacts { get; set; }
        public List<OffreDeStage> offresDeStage { get; set; }
        public List<Contrat> contrats { get; set; }

        #region controle de validite
        #region test validation
        /// <summary>
        /// Cette méthode permet de vérifier que l'entreprise passée en paramètre est une entreprise avec des données valides afin de savoir
        /// si elle peut être ajoutée dans la base de données.
        /// </summary>
        /// <param name="ent">Donnée de l'entreprise à tester</param>
        /// <returns>Retourne un booléen qui indique si l'entreprise est valide (true : valide)</returns>
        public bool isValidEntreprise()
        {

            if (this.libelle == "" || this.libelle == null)
                return false;
            if (this.libelle.Length > 255)
                return false;
            Regex verifNumero = new Regex(@"^[0-9.+()\s-]*$");
            if (this.telephone != null && this.telephone != "")
            {
                if (!verifNumero.IsMatch(this.telephone))
                    return false;
            }
            if (this.fax != null && this.fax != "")
            {
                if (!verifNumero.IsMatch(this.fax))
                    return false;
            }
            if (this.mail != null && this.mail != "")
            {
                Regex verifMail = new Regex(@"^[a-z0-9.-]+@[a-z0-9.-]{2,}\.[a-z]{2,4}$");
                if (!verifMail.IsMatch(this.mail))
                    return false;
            }
            return true;
        }
        #endregion
        
        
        
        public class ENTREPRISECV
        {
            public int id { get; set; }
            [StringLength(50), Required]
            public string libelle { get; set; }

            [StringLength(50)]
            [DataType(DataType.PhoneNumber)]
            [RegularExpression(@"^[0-9.+()\s-]*$", ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "ErrorMessageMail")]
            public string telephone { get; set; }
            [StringLength(50)]
            [DataType(DataType.PhoneNumber)]
            [RegularExpression(@"^[0-9.+()\s-]*$", ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "ErrorMessageMail")]
            public string fax { get; set; }

            [StringLength(255)]
            [DataType(DataType.EmailAddress)]
            [RegularExpression(@"^[a-z0-9.-]+@[a-z0-9.-]{2,}\.[a-z]{2,4}$", ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "ErrorMessageMail")]
            [Display(ResourceType = typeof(Resources), Name = "lblCompanyMail")]
            public string mail { get; set; }
            public string adresse { get; set; }
            [StringLength(5)]
            public string cp { get; set; }
            public string ville { get; set; }
            public string infoComp { get; set; }


            public ENTREPRISECV(){}

            public ENTREPRISECV(Entreprise ent)
            {
                libelle = ent.libelle;
                telephone = ent.telephone;
                fax = ent.fax;
                mail = ent.mail;
                adresse = ent.adresse;
                cp = ent.cp;
                ville = ent.ville;
                infoComp = ent.infoComp;
            }
        }
        #endregion
   
    }
}